package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IAttendGoOutRuleDAO;
import org.jsola.hr.dto.AttendGoOutRuleAddDTO;
import org.jsola.hr.dto.AttendGoOutRuleUpdateDTO;
import org.jsola.hr.entity.AttendGoOutRuleDO;
import org.jsola.hr.query.AttendGoOutRuleQuery;
import org.jsola.hr.vo.AttendGoOutRuleListVO;
import org.jsola.hr.vo.AttendGoOutRuleVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * @author zhr
 */
public interface IAttendGoOutRuleService extends IService<IAttendGoOutRuleDAO, AttendGoOutRuleDO> {

    /**
     * 新增外出打卡规则
     * @param attendGoOutRuleAddDTO 新增外出打卡规则DTO
     * @param tokenUser 当前用户
     * @return 外出打卡规则详情信息
     */
    AttendGoOutRuleVO save(AttendGoOutRuleAddDTO attendGoOutRuleAddDTO, TokenUser tokenUser);

    /**
     * 修改外出打卡规则
     * @param attendGoOutRuleUpdateDTO 修改外出打卡规则DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(AttendGoOutRuleUpdateDTO attendGoOutRuleUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除外出打卡规则，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param attendGoOutRuleIds 外出打卡规则id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...attendGoOutRuleIds);

    /**
     * 根据外出打卡规则id查找
     * @param attendGoOutRuleId 外出打卡规则id
     * @param siteId 所属站点id
     * @return 外出打卡规则详情信息
     */
    AttendGoOutRuleVO selectById(String attendGoOutRuleId, String siteId);

    /**
     * 查询外出打卡规则
     * @param attendGoOutRuleQuery 查询条件
     * @param siteId 所属站点id
     * @return 外出打卡规则列表信息
     */
    List<AttendGoOutRuleListVO> select(AttendGoOutRuleQuery attendGoOutRuleQuery, String siteId);

    /**
    * 查询外出打卡规则记录数
    * @param attendGoOutRuleQuery 查询条件
    * @param siteId 所属站点id
    * @return 外出打卡规则记录数
    */
    int selectCount(AttendGoOutRuleQuery attendGoOutRuleQuery, String siteId);

    /**
     * 分页查询外出打卡规则
     * @param attendGoOutRuleQuery 查询条件
     * @param siteId 所属站点id
     * @return 外出打卡规则列表信息
     */
    Page<AttendGoOutRuleListVO> selectPage(AttendGoOutRuleQuery attendGoOutRuleQuery, String siteId);


    /**
     * 根据外出打卡规则id查找
     * @param attendGoOutRuleId 外出打卡规则id
     * @param siteId 所属站点id
     * @return 外出打卡规则
     */
    AttendGoOutRuleDO selectDOById(String attendGoOutRuleId, String siteId);

    /**
     * 查询外出打卡规则
     * @param attendGoOutRuleQuery 查询条件
     * @param siteId 所属站点id
     * @return 外出打卡规则列表
     */
    List<AttendGoOutRuleDO> selectDO(AttendGoOutRuleQuery attendGoOutRuleQuery, String siteId);

    /**
     * 根据公司ID查询出唯一一条数据
     *
     * @param siteId    站点Id
     * @param companyId 公司Id
     * @return 外出打卡规则
     */
    AttendGoOutRuleVO selectOneByCompanyId(String companyId, String siteId);

}


